import router from "@/router";
import { ElMessage } from 'element-plus';
import * as Api from '@/axios/api';
import type { AgvConfig, PageParam, AgvTask, TableDataInfo, AjaxResult } from "@/axios/types";

/**
 * 工具元信息接口，供 AI 获取可用工具及其描述
 */
export interface ToolMeta {
  name: string;
  description: string;
  availableOn: string[]; // 可用路径, e.g., ['/task', '/task/detail/:id'] or ['*'] for global
  preconditions?: string[]; // 前置条件
}

// =============================================================================
// 1. 页面导航工具 (Navigation Tools)
// =============================================================================

/**
 * 跳转到系统初始化自检页面
 */
export function routerToInitView() {
  router.push('/');
}

/**
 * 打开系统设置页面
 */
export function routerToSettingsView() {
  router.push('/setting');
}

/**
 * 打开任务列表页面
 */
export function routerToTaskView() {
  router.push('/task');
}

/**
 * 根据任务ID，打开任务详情页面
 * @param id 任务ID
 */
export function routerToTaskDetailView(id: string | number) {
  router.push(`/task/detail/${id}`);
}

/**
 * 根据任务ID，打开任务执行（巡检）页面
 * @param id 任务ID
 */
export function routerToTaskExecuteView(id: string | number) {
  router.push(`/task/execute/${id}`);
}


// =============================================================================
// 2. 数据查询工具 (Data Query Tools)
// =============================================================================

/**
 * 获取任务列表
 * @param params 查询参数，例如 { pageNum: 1, pageSize: 10, taskName: '模糊搜索' }
 * @returns 任务列表数据
 */
export async function getTaskList(params?: any) {
  const response: TableDataInfo<AgvTask> = await Api.listTask( { pageNum: 1, pageSize: 999 });
  return response.rows;
}

/**
 * 获取指定ID的任务详情
 * @param id 任务ID
 * @returns 任务详细信息
 */
export async function getTaskDetail(id: number | string) {
  const { data } = await Api.getTask(id);
  return data;
}

/**
 * 获取系统配置信息
 * @returns 系统配置对象
 */
export async function getSystemSettings() {
  const { data } = await Api.getConfig();
  return data;
}

/**
 * 获取缺陷列表
 * @param params 查询参数，例如 { pageNum: 1, pageSize: 10, flawName: '模糊搜索' }
 * @returns 缺陷列表数据
 */
export async function getFlawList(params?: any) {
  const response: TableDataInfo<any> = await Api.listFlaw(params);
  return response.rows;
}

/**
 * 获取指定ID的缺陷详情
 * @param id 缺陷ID
 * @returns 缺陷详细信息
 */
export async function getFlawDetail(id: number | string) {
  const { data } = await Api.getFlaw(id);
  return data;
}


// =============================================================================
// 3. 操作执行工具 (Action Execution Tools)
// =============================================================================

/**
 * 对整个系统进行一次完整的健康状况自检
 * @returns 返回各项检查的结果
 */
export async function runSystemCheck() {
  const checks = [Api.checkFs, Api.checkDb, Api.checkAgv, Api.checkCam];
  // 注意：API中的signal这里用null代替，因工具调用不与组件生命周期绑定
  const results = await Promise.all(checks.map(check => check(null as any)));
  return results.map(res => res.data);
}

/**
 * 启动一个指定的巡检任务
 * @param id 要启动的任务ID
 */
export async function startTask(id: number | string) {
  await Api.startTask(id);
  return `任务 ${id} 已成功启动。`;
}

/**
 * 停止一个正在执行的巡检任务
 * @param id 要停止的任务ID
 */
export async function stopTask(id: number | string) {
  // isAbort=true 代表是异常中断
  await Api.endTask(id, true);
  return `任务 ${id} 已被停止。`;
}

/**
 * 保存新的系统配置
 * @param settings 新的配置对象
 */
export async function updateSystemSettings(settings: AgvConfig) {
  await Api.updateConfig(settings);
  return '系统配置已更新。';
}

/**
 * 新增一个缺陷记录
 * @param flawData 缺陷数据
 * @returns 新增的缺陷记录
 */
export async function createFlaw(flawData: any) {
  const { data } = await Api.addFlaw(flawData);
  return data;
}

/**
 * 更新一个已有的缺陷记录
 * @param flawData 缺陷数据
 * @returns 更新的缺陷记录
 */
export async function updateFlaw(flawData: any) {
  const { data } = await Api.updateFlaw(flawData);
  return data;
}

/**
 * 删除一个缺陷记录
 * @param id 缺陷ID
 * @returns 删除结果
 */
export async function deleteFlaw(id: number | string) {
  await Api.delFlaw(id);
  return `ID为 ${id} 的缺陷已删除。`;
}


// =============================================================================
// 4. UI交互工具 (UI Interaction Tools)
// =============================================================================

/**
 * 显示一个全局通知消息
 * @param message 要显示的消息内容
 * @param type 消息类型, 'success' | 'warning' | 'info' | 'error'
 */
export function showNotification(message: string, type: 'success' | 'warning' | 'info' | 'error' = 'info') {
  ElMessage({ message, type });
  return `已显示通知: "${message}"`;
}


// =============================================================================
// 5. 工具清单 (Tools Manifest)
// =============================================================================

/**
 * 所有可用工具的元信息列表，供 AI 自动选择和调用
 */
export const toolsInfo: ToolMeta[] = [
  // Navigation
  { name: 'routerToInitView', description: '跳转到初始化自检页面', availableOn: ['*'] },
  { name: 'routerToSettingsView', description: '打开设置页面', availableOn: ['*'] },
  { name: 'routerToTaskView', description: '打开任务列表页面', availableOn: ['*'] },
  { name: 'routerToTaskDetailView', description: '请先获取任务ID，只可以跳转状态为待上传的任务,根据用户需求跳转，跳转至任务详情页，状态和ID可以从getTaskList中获取', availableOn: ['*'], preconditions: ["任务必须是'待上传'状态"] },
  { name: 'routerToTaskExecuteView', description: '请先获取任务ID，只可以跳转状态为巡视中的任务，跳转至任务执行（巡检）页，状态和ID可以从getTaskList中获取', availableOn: ['*'], preconditions: ["任务必须是'巡视中'状态"] },
  // Data Query
  { name: 'getTaskList', description: '查询任务列表', availableOn: ['/task'] },
  { name: 'getTaskDetail', description: '查询指定ID任务的详细信息', availableOn: ['*'] },
  { name: 'getSystemSettings', description: '查询当前的系统配置', availableOn: ['/setting'] },
  { name: 'getFlawList', description: '查询缺陷列表', availableOn: ['/task/detail/:id', '/task/execute/:id'] },
  { name: 'getFlawDetail', description: '查询指定ID缺陷的详细信息', availableOn: ['/task/detail/:id', '/task/execute/:id'] },
  // Actions
  { name: 'runSystemCheck', description: '执行一次完整的系统健康自检', availableOn: ['/'] },
  { name: 'startTask', description: '启动一个指定的巡检任务', availableOn: ['/task'], preconditions: ["任务必须是'待执行'或'已暂停'状态"] },
  { name: 'stopTask', description: '强制停止一个正在执行的巡检任务', availableOn: ['/task/execute/:id'], preconditions: ["任务必须是'运行中'状态"] },
  { name: 'updateSystemSettings', description: '保存新的系统配置', availableOn: ['/setting'] },
  { name: 'createFlaw', description: '新增一个缺陷记录', availableOn: ['/task/execute/:id'] },
  { name: 'updateFlaw', description: '更新一个已有的缺陷记录', availableOn: ['/task/detail/:id', '/task/execute/:id'] },
  { name: 'deleteFlaw', description: '删除一个缺陷记录', availableOn: ['/task/detail/:id'] },
  // UI
  { name: 'showNotification', description: '显示一个全局通知', availableOn: ['*'] },
];